/*
*
* This file is part of Luces de 1984 SDL version (L1-sdl).
* Copyright (C) <2017>  <alkeon> [alkeon@autistici.org]
   
* L1-sdl is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L1-sdl is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l1-sdl.  If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <iostream>
#include <string>
#include "metodos.h"
#include "SDL_ttf.h"
#include "SDL.h"
using namespace std;

int main (){
	//Iniciar pantalla (NCURSES)
	//Comprueba si se inicia SDL
	if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
	{
		printf( "No se inició SDL. %s\n", SDL_GetError() );
	}
	else
	{
		//Crea una ventana
		SDL_Window * gWindow = SDL_CreateWindow( "DQM", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 700, 480, SDL_WINDOW_RESIZABLE);
		//Comprueba la creación de la ventana
		if( gWindow == NULL )
		{
			printf( "La ventana no se inició. %s\n", SDL_GetError() );
		}
		else
		{
			//Crea el render
			SDL_Renderer * gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_PRESENTVSYNC);
			//Comprueba la creación de la ventana
			if( gRenderer==NULL ){
				printf( "El render no se inició. %s\n", SDL_GetError() );
			}
			TTF_Init();
	if(TTF_Init()==-1) {
		printf("TTF_Init: %s\n", TTF_GetError());
	}
	TTF_Font * gFont = TTF_OpenFont( "LiberationMono-Regular.ttf", 13 );
	if(!gFont) {
		printf("TTF_OpenFont: %s\n", TTF_GetError());

	}else{
		juego juego;
		juego.ventana=gWindow;
		juego.render=gRenderer;
		juego.font=gFont;
		juego.inicio();
	}
		}
	}
	SDL_Quit();
}


void juego::inicio(){
	printa("Bienvenido a Luces de 1984\n");//0
	printa("un juego creado por Alkeon.\n");
	//Iniciando personajes
	Personaje molde(0,30,0,0,1);
	Personaje Winston(0,20,0,0,0);
	//Final 1	
	Winston.psicosis=1;
	//Final 2
	Winston.soledad=1;
	//Final 3
	Winston.esperpento=1;
	//Final 4
	Winston.hola_dave=1;
	Winston.vida=200;
	Winston.ataque=20;
	molde.vida=80;
	molde.ataque=4;
	//Menú
	this->menu(Winston,molde);
}
void juego::printa(std::string linea){
	for(int i=16;i>0;i--){
		this->texto[i]=this->texto[i-1];
	}
	this->texto[0]=linea;
	std::string texto2="";
	for(int e=16;e>=0;e--){
		texto2+=this->texto[e];
	}
	SDL_Surface * textSurface = TTF_RenderUTF8_Blended_Wrapped( this->font, texto2.c_str(), this->blanco,660);
	SDL_Rect renderQuad;
		renderQuad.x = 0;
		renderQuad.y = 0;
		renderQuad.w = textSurface->w;
		renderQuad.h = textSurface->h;
	SDL_Texture * mTexture = SDL_CreateTextureFromSurface( this->render, textSurface);

	SDL_SetRenderDrawColor( this->render, 0, 0, 0, 255 );
	SDL_RenderClear( this->render );

	SDL_RenderCopy( this->render, mTexture, NULL, &renderQuad);
	SDL_RenderPresent( this->render );
	SDL_Delay(200);
}

void juego::pausa(){
	printa("Pulsa la tecla 'Enter'.\n");
	SDL_Event e;
	bool continua=true;
	while( SDL_WaitEvent( &e ) != 0  && continua){
		if( e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_RETURN ){
			continua=false;
		}
	}
}

void juego::menu(Personaje& v, Personaje& h){
	printa("En este menú puedes escoger distintos puntos:\n");
	printa("1.- Guía sencilla y recomendaciones\n");
	printa("2.- Comenzar el juego\n");
	printa("3.- Cargar juego\n");
	printa("4.- Créditos\n");
	printa("5.- Salir\n");
	SDL_Event e;
	bool continua=true;
	while(continua){		
			if( SDL_WaitEvent( &e ) != 0 ){
				if(e.type == SDL_KEYDOWN){
					if(e.key.keysym.sym == SDLK_1){
						this->tutorial(); menu(v,h);
						continua=false;
					}
					if(e.key.keysym.sym == SDLK_2){
						this->escoger_opciones(v,h);
						continua=false;
					}
					if(e.key.keysym.sym == SDLK_3){
						vista_previa_partida("save.dat");
						continua=false;
					}
					if(e.key.keysym.sym == SDLK_4){
						this->creditos(v); menu(v,h);
						continua=false;
					}
					if(e.key.keysym.sym == SDLK_5){
						continua=false;
					}
				}
				if(e.type == SDL_QUIT){
					continua=false;
				}
			}
		
	}
	
}

void juego::tutorial(){
	printa("Narrador:Buenas soy el narrador de esta historia.\n");
	printa("Alkeon me tiene (y no me paga) para explicar todo el juego.\n");
	printa("Como veis al intervenir un personaje ocurre como en el teatro escrito.\n");
	printa("Si sigo hablando no se repite. Solo se espera a que cambie de personaje.\n");
	printa("Como consejos, no escribas letras si te piden números y este juego es dinámico.\n");
	printa("Cada vez que se puede, es modificado de ahí las actualizaciones.\n");
	printa("Si tuvieras alguna queja, se las mandas a Alkeon.\n");
	printa("¿No sabes cómo? Recuerda su página es https://autistici.org/alkeon\n\n");
}
void juego::escoger_opciones(Personaje& v, Personaje& h){

	printa("Antes de empezar la partida puedes escoger ciertas opciones que te hacen la experiencia de juego más personalizable y compatible con tu modo de juego.\n");

	if(this->guardados_automaticos!=2){
		this->opcion_guardado(v,h);
	}

	this->opcion_nombre(v,h);

	this->preguntas_principales(v,h);
}
void juego::opcion_guardado(Personaje& v, Personaje& h){
	
	printa("¿Prefieres guardados automáticos?\n");
	printa("1.- Sí\n");
	printa("2.- No\n");
	SDL_Event e;
	bool continua=true;
	while(continua){
			if( SDL_WaitEvent( &e ) != 0){
					if(e.type == SDL_KEYDOWN){
						if(e.key.keysym.sym == SDLK_1){
							this->guardados_automaticos=1;
							continua=false;
						}
						if(e.key.keysym.sym == SDLK_2){
							this->guardados_automaticos=2;
							continua=false;
						}
					}
					if(e.type == SDL_QUIT){
						continua=false;
					}
			}
		
	}
}
void juego::opcion_nombre(Personaje& v, Personaje& h){
	printa("Antes de empezar puedes escoger otro nombre distinto del predeterminado\n");
	printa("Te recomendamos por la historia y el tema principal que mantengas Winston\n");
	printa("Como referencia a uno de los finales puedes usar el nombre de Dave\n");
	printa("1.- Dejar el nombre de Winston\n");
	printa("2.- Quiero llamarme Dave\n");
	SDL_Event e;
	bool continua=true;
	while(continua){
			if( SDL_WaitEvent( &e ) != 0){
				if( e.type == SDL_KEYDOWN ){
					if(e.key.keysym.sym == SDLK_1){
						v.nombre="Winston";
						continua=false;
					}
					if(e.key.keysym.sym == SDLK_2){
						v.nombre="Dave";
						continua=false;
					}
				}
				if(e.type == SDL_QUIT){
					continua=false;
				}
			}
		
	}

}

void juego::creditos(Personaje& v){
	printa("La licencia de este juego es GNU GPL versión 3.\n");
	printa("Puedes saber más sobre este juego en https://autistici.org/alkeon/\n");
	printa("Dedicatoria:\n");
	printa("Por los que se van, por los que se quedan.\n");
	printa("A todos ellos, gracias.\n\n");
}

